package network;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

//自己模拟实现一个客户端向服务器发送请求的流程的实现；
public class UdpEchoClient {
    //首先进行客户端相关类的创建；
    private DatagramSocket socket = null;
    //进行向服务器发送请求需要知道服务器的地址和端口号，才可以能够进行正确的发送；
    private String severIp;
    private int severPort;

    //所以进行该类的构造需要进行获取服务器的地址和端口号；
    public UdpEchoClient(String severIp, int severPort) throws SocketException {
        this.severIp = severIp;
        this.severPort = severPort;
        socket = new DatagramSocket();//此处使用默认端口号；方便操作系统进行相关的调用操作；
        //如果规定端口号会使得这个客户端一直占用着这个端口，其他的客户端无法进行使用，应用程序的使用；
    }
        //接下来进行启动客户端方法的实现;
        public void start () throws IOException {
            //1.通过控制台进行输入客户请求；
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.println("请输入你要发送的请求");
                if (!scanner.hasNext()) {
                    break;//直到用户不进行发送请求才结束该进程；
                }
                String request = scanner.next();//通过变量request获取用户的请求；
                //2.进行请求的发送；
                //在进行发送前需要进行实例化一个DatagramPacket类完成相关准备操作；
                //需要进行准备：1.构造一个存放请求的载荷；
                //   2.进行服务器的ip和端口的获取；
                DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),
                        request.getBytes().length, InetAddress.getByName(severIp), severPort);
                socket.send(requestPacket);//向服务器进行传递请求；
                //3.传递请求后就需要进行等待接收服务器的响应；
                //要进行响应的接收，需要进行准备工作，即把接收到的响应数据存放在哪里；
                // 这时就需要进行构建一个类进行相关数据的存放了；
                DatagramPacket responsePacket = new DatagramPacket(new byte[4096], 4096);
                socket.receive(responsePacket);//服务器响应的接收；
                //接下来，就进行将接收的响应数据进行相关的打印；
                String response = new String(responsePacket.getData(), 0,responsePacket.getLength());
                System.out.println(response);
            }
        }
        public static void main(String[] args) throws IOException {
        UdpEchoClient client=new UdpEchoClient("127.0.0.1",9090);
        client.start();
        }
    }


